package cn.jinhe.doc.view.action;

import java.util.List;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cn.jinhe.doc.base.BaseAction;
import cn.jinhe.doc.domain.Repository;
import cn.jinhe.doc.domain.Topic;
import cn.jinhe.doc.util.QueryHelper;

@Controller
@Scope("prototype")
public class RepositoryAction extends BaseAction<Repository> {

	/**
	 * 0 全部主题 1 全部精华贴
	 */
	private int viewType = 0;

	/**
	 * 0 默认排序(所有置顶帖在前面，并按最后更新时间降序排列) 1 只按最后更新时间排序 2 只按主题发表时间排序 3 只按回复数量排序
	 */
	private int orderBy = 0;

	/**
	 * true 表示升序 false 表示降序
	 */
	private boolean asc = false;

	/**
	 * 板块列表
	 * 
	 * @return
	 * @throws Exception
	 */
	public String list() throws Exception {
		List<Repository> repositoryList = repositoryService.findAll();
		ActionContext.getContext().put("repositoryList", repositoryList);
		return "list";
	}

	/**
	 * 显示板块内容
	 * 
	 * @return
	 * @throws Exception
	 */

	public String show() throws Exception {

		Repository repository = repositoryService.getById(model.getId());
		ActionContext.getContext().put("repository", repository);
		// List<Topic> topicList=topicService.findByRepository(repository);
		// ActionContext.getContext().put("topicList", topicList);

		// 准备分页信息
		// PageBean
		// pageBean=topicService.getPageBeanByRepository(pageNum,pageSize,repository);
		// ActionContext.getContext().getValueStack().push(pageBean);
		// String hql =
		// "FROM Topic t WHERE t.repository=? ORDER BY (CASE t.type WHEN 2 THEN 2 ELSE 0 END) DESC, t.lastUpdateTime DESC";
		// String hql = "FROM Topic t WHERE t.repository=?";
		// String hqlCount="FROM Topic t WHERE t.repository=?";
		//
		// List<Object> parameters=new ArrayList<Object>();
		// parameters.add(repository);
		// if(viewType==1){//表示只看精华帖
		// hql+=" AND t.type=?";
		// hqlCount+=" AND t.type=?";
		// parameters.add(Topic.TYPE_BEST);
		// }
		// if(orderBy==1)// 1 表示只按最后更新时间排序
		// {
		// hql += " ORDER BY t.lastUpdateTime " + (asc ? "ASC" : "DESC");
		//
		// }else if(orderBy==2){// 2 表示只按主题发表时间排序
		// hql += " ORDER BY t.postTime " + (asc ? "ASC" : "DESC");
		// }else if(orderBy==3){// 3 表示只按回复数量排序
		// hql += " ORDER BY t.replyCount " + (asc ? "ASC" : "DESC");
		// }else{ // 0 表示默认排序(所有置顶帖在前面，并按最后更新时间降序排列)
		// hql +=
		// " ORDER BY (CASE t.type WHEN 2 THEN 2 ELSE 0 END) DESC, t.lastUpdateTime DESC";
		// }

		// List<Object> parameters = new ArrayList<Object>();
		// parameters.add(repository);

		// PageBean pageBean = replyService.getPageBean(pageNum, pageSize,
		// hql,hqlCount, parameters);
		// ActionContext.getContext().getValueStack().push(pageBean);

		// 准备分页信息 ，最终版
		new QueryHelper(Topic.class, "t")//
				// 过滤条件
				.addCondition("t.repository=?", repository)//
				.addCondition((viewType == 1), "t.type=?", Topic.TYPE_BEST) // 1
																			// 表示只看精华文章
				// 排序条件
				.addOrderProperty((orderBy == 1), "t.lastUpdateTime", asc) // 1
																			// 表示只按最后更新时间排序
				.addOrderProperty((orderBy == 2), "t.postTime", asc) // 2
																		// 表示只按主题发表时间排序
				.addOrderProperty((orderBy == 3), "t.replyCount", asc) // 3
																		// 表示只按回复数量排序
				.addOrderProperty((orderBy == 0),
						"(CASE t.type WHEN 2 THEN 2 ELSE 0 END)", false)//
				.addOrderProperty((orderBy == 0), "t.lastUpdateTime", false) // 0
																				// 表示默认排序(所有置顶帖在前面，并按最后更新时间降序排列)
				.preparePageBean(topicService, pageNum, pageSize);

		return "show";
	}

	public int getViewType() {
		return viewType;
	}

	public void setViewType(int viewType) {
		this.viewType = viewType;
	}

	public int getOrderBy() {
		return orderBy;
	}

	public void setOrderBy(int orderBy) {
		this.orderBy = orderBy;
	}

	public boolean isAsc() {
		return asc;
	}

	public void setAsc(boolean asc) {
		this.asc = asc;
	}

}
